const { Worker } = require('worker_threads');
const path = require('path');

console.log('开始测试WebAssembly Calculator Worker...');

// 创建Worker实例
const worker = new Worker(path.join(__dirname, 'calculator-worker.js'));

let testTimeout;
let initReceived = false;

// 监听Worker消息
worker.on('message', (data) => {
    console.log('收到Worker消息:', data);
    
    if (data.type === 'initialized' && data.success) {
        initReceived = true;
        console.log('WebAssembly模块初始化成功，发送测试数据: 5 + 3');
        // 发送计算请求
        worker.postMessage({
            type: 'calculate',
            operation: 'sum',
            operands: [5, 3]
        });
        
        // 设置超时，如果10秒内没有收到结果就退出
        testTimeout = setTimeout(() => {
            console.log('测试超时，强制退出Worker');
            worker.terminate();
        }, 10000);
    } else if (data.type === 'result') {
        console.log('✅ 计算结果:', data.result);
        console.log('✅ WebAssembly模块工作正常！');
        clearTimeout(testTimeout);
        worker.terminate();
    } else if (data.type === 'error') {
        console.error('❌ Worker返回错误:', data.error);
        clearTimeout(testTimeout);
        worker.terminate();
    }
});

// 监听Worker错误
worker.on('error', (error) => {
    console.error('❌ Worker错误:', error);
    clearTimeout(testTimeout);
});

// 监听Worker退出
worker.on('exit', (code) => {
    clearTimeout(testTimeout);
    if (code !== 0) {
        console.error(`❌ Worker异常退出，退出码: ${code}`);
    } else {
        console.log('Worker正常退出');
    }
    
    if (!initReceived) {
        console.log('❌ 未收到初始化完成消息，可能WebAssembly加载失败');
    }
});

// 15秒后强制退出
setTimeout(() => {
    console.log('总体测试超时，强制退出');
    worker.terminate();
}, 15000);